﻿using shopLinhOnline.Models.ACK;
using shopLinhOnline.Models.Type;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace shopLinhOnline.Models.DAO
{
    public class NguoiDungDAO
    {
        //khai bao đối tượng db đại diện cho CSDL
        private ShopOnlineDataContext db = new ShopOnlineDataContext();

        /// <summary>
        /// Lấy đối tượng người dùng dựa trên username và password
        /// </summary>
        /// <param name="_username">tên đăng nhập</param>
        /// <param name="_password">mật khẩu</param>
        /// <returns></returns>
        public NguoiDung Login(string _username, string _password)
        {
            NguoiDung objResult = null;
            objResult = db.NguoiDungs.Where(p => p.UserName.Trim() == _username && p.Password.Trim() == _password).FirstOrDefault();
            return objResult;
        }

        /// <summary>
        /// Lấy danh sách người dùng
        /// </summary>
        /// <returns></returns>
        public List<NguoiDung> GetAll()
        {
            List<NguoiDung> lstResult = new List<NguoiDung>();
            lstResult = db.NguoiDungs.Where(p => p.Xoa == false).ToList();
            return lstResult;
        }

        /// <summary>
        /// Thêm mới đối tượng người dùng
        /// </summary>
        /// <param name="_obj">đối tượng người dùng cần thêm mới</param>
        /// <returns></returns>
        public NguoiDungACK Insert(NguoiDung _obj)
        {
            NguoiDungACK obj = new NguoiDungACK();

            // Ban đầu khởi tạo các tham số mặc định
            obj.ID = -1; // chưa có người dùng nào
            obj.IError = Type.ERRORTYPE.NONE; // chưa lỗi

            //kiểm tra tên đăng nhập người dùng có tồn tại hay chưa.
            NguoiDung info = Login(_obj.UserName.Trim(), _obj.Password.Trim());
            if (info != null)
            { 
                //tên người dùng này đã tồn tại -> không thêm mới báo lỗi 100: tên người dùng đã tồn tại
                obj.IError = Type.ERRORTYPE.UserIsExisted;
            }
            else
            { 
                //tên người dùng chưa tồn tại ta tiến hành thêm mới người dùng.
                db.NguoiDungs.InsertOnSubmit(_obj);
                try {
                    db.SubmitChanges();
                    obj.ID = _obj.ID;
                }
                catch {
                    obj.IError = Type.ERRORTYPE.ErrorInsert;
                }
            }
            return obj;
        }
        /// <summary>
        /// cập nhật đối tượng người dùng
        /// </summary>
        /// <param name="_obj">đối tượng người dùng cần cập nhật</param>
        /// <returns></returns>
        public bool Update(NguoiDung _obj)
        {
            bool isSuccess = false;
            NguoiDung info = db.NguoiDungs.Where(p => p.ID == _obj.ID).FirstOrDefault();
            if (info != null)
            { 
                //nếu tồn tại đối tượng người dùng tương ứng với mã người dùng thì ta tiến hành cập nhật.
                info.UserName = _obj.UserName;
                info.Password = _obj.Password;
                info.Ten = _obj.Ten;
                info.GioiTinh = _obj.GioiTinh;
                info.DienThoai = _obj.DienThoai;
                info.Xoa = _obj.Xoa;
                try
                {
                    db.SubmitChanges();
                    isSuccess = true;
                }
                catch { 
                    //cập nhật bị lỗi
                }
            }
            return isSuccess;
        }

        /// <summary>
        /// Lấy đối tượng người dùng dựa trên khóa chính
        /// </summary>
        /// <param name="_id">mã người dùng</param>
        /// <returns></returns>
        public NguoiDung SelectByPrimaryKey(int _id)
        {
            NguoiDung objResult = null;

            objResult = db.NguoiDungs.Where(p => p.ID == _id).FirstOrDefault();

            return objResult;
        }
        /// <summary>
        /// Lấy loại người dùng dựa trên mã người dùng
        /// </summary>
        /// <param name="_id">mã người dùng</param>
        /// <returns></returns>
        public UserType GetTypeUser(int _id)
        {
            UserType obj = UserType.Non_User;//người dùng chưa đăng nhập
            switch (_id)
            { 
                case 1:
                    obj = UserType.Admin;//người dùng là admin
                    break;
                case 2:
                    obj = UserType.UserViewer; // người dùng thông thường
                    break;
            }
            return obj;
        }
        /// <summary>
        /// Xóa một đối tượng người dùng
        /// </summary>
        /// <param name="_id"></param>
        /// <returns></returns>
        public bool Delete(int _id)
        {
            bool isSuccess = false;
            NguoiDung info = db.NguoiDungs.Where(p => p.ID == _id).FirstOrDefault();
            if (info != null)
            {
                info.Xoa = true;
                try {
                    db.SubmitChanges();
                    isSuccess = true;
                }
                catch { }
            }
            return isSuccess;
        }
    }
}